数据库 - Table 针对用户类型个人用户和组织用户的设计
Database - Table Design for User Type Individual User and Organization User
我是新来的,所以请多多包涵。
好的,所以我遇到了这个问题,用户(个人用户类型(管理员)或组织用户类型(一群人))登录到我的网站。
用户信息可能因用户类型而异(管理员可以有年龄、生日、名字、姓氏和其他个人相关信息,而组织有组织名称、创建日期、官员列表、组织状态和其他与组织相关的信息)
我还需要制作一个用户到用户的消息传递系统。示例是组织对个人的消息,反之亦然,个人对个人
有人知道我该怎么做吗?感谢任何帮助
同时
这就是我认为的消息传递方式(目前在考虑解决我的问题时遇到麻烦):
TABLE Users
UserAccountNumber varchar(20) Example : 2016-02081-ORG
UserPassword varchar(20)
UserTypeID tinyint Example : 0 for admin, 1 for organizations
TABLE Message
MessageID varchar(20) Example: GF23DG2VS45G <- RANDOM GENERATED
SenderID varchar(20) <- UserAccountNumber FK
ReceiverID varchar(20) <- UserAccountNumber FK
Time_Message datetime
TABLE MESSAGE_TEXT
MessageTextID varchar(20)
MessageID <- FK
Body varchar(255) <- message Example : "Hello, how are you?"
Time_Message datetime
随时重新设计我的消息 table 设计以帮助我改进它。
你走在正确的轨道上。为组织和人员制作 table。 Link 他们返回 'users' 帐号或更好的整数 id 字段。每条消息还应该有一个 id 字段,用于将消息链接到用户。然后对于任何消息,您可以从适当的 table.
中找到用户和用户的信息
不要使用 VARCHAR 作为您的 ID。使用 INT(或 bigint/long)并通过 table(mysql)或序列(oracle/postgres)
上的自动递增机制生成它
在您的情况下,管理员和组织 is-a
用户,因此您可能需要考虑 database inheritance
。用户 table 是具有共享属性的基础。如果您没有共享属性,那么它只需要一个 user_id 列和一个 type discriminator
列,它们的值可以是 "admin" 或 "organization"。您的管理员和组织 table 的主键将是 user_id,它也将是返回给用户的外键。您可能希望在首先插入用户的管理员和组织上有 BEFORE INSERT triggers
,然后将生成的 user_id 注入相应的 table.
管理员是否将成为组织的官员名单?假设是这样:
user
----
user_id INT AUTO_INCREMENT PRIMARY KEY
user_type VARCHAR CHECK (user_type in ('admin', 'organization')) -- This is called the discriminator
-- other shared attributes go here, if any
admin -- this extends user
----
user_id INT PRIMARY KEY REFERENCES USER (id)
first_name VARCHAR
last_name VARCHAR
age INT
birth_date DATE
organization_id INT REFERENCES organization (user_id) -- an admin belongs to an organization
organization -- this extends organization
------------
user_id INT PRIMARY KEY REFERENCS USER (id)
name VARCHAR
incorporation_date DATE
现在,对于消息系统。我只想将您的 message
和 message
文本合并为一个。
message
-------
message_id INT AUTO_INCREMENT PRIMARY KEY
parent_message_id INT UNIQUE REFERENCES message (message_id) # This lets you keep track of replies
sender_id INT REFERENCES user (user_id)
receiver_id INT REFERENCS user (user_id)
dt DATETIME
message_body TEXT
当然,如果您希望能够发送给多个人而不是一个人:
message
-------
message_id INT PRIMARY KEY
parent_message_id INT UNIQUE REFERENCES message (message_id) # This lets you keep track of replies
sender_id INT REFERENCES user (user_id)
dt DATETIME
message_body TEXT
message_receiver
---------------
message_id PRIMARY KEY REFERENCES message (message_id)
receiver_id INT PRIMARY KEY REFERENCES user (user_id)
type VARCHAR CHECK (type in ('TO', 'CC", 'BCC')) -- This would let you do an normal email To, Carbon Copy, Blind Carbon Copy if you wished
我是新来的,所以请多多包涵。
好的,所以我遇到了这个问题,用户(个人用户类型(管理员)或组织用户类型(一群人))登录到我的网站。
用户信息可能因用户类型而异(管理员可以有年龄、生日、名字、姓氏和其他个人相关信息,而组织有组织名称、创建日期、官员列表、组织状态和其他与组织相关的信息)
我还需要制作一个用户到用户的消息传递系统。示例是组织对个人的消息,反之亦然,个人对个人
有人知道我该怎么做吗?感谢任何帮助
同时
这就是我认为的消息传递方式(目前在考虑解决我的问题时遇到麻烦):
TABLE Users
UserAccountNumber varchar(20) Example : 2016-02081-ORG
UserPassword varchar(20)
UserTypeID tinyint Example : 0 for admin, 1 for organizations
TABLE Message
MessageID varchar(20) Example: GF23DG2VS45G <- RANDOM GENERATED
SenderID varchar(20) <- UserAccountNumber FK
ReceiverID varchar(20) <- UserAccountNumber FK
Time_Message datetime
TABLE MESSAGE_TEXT
MessageTextID varchar(20)
MessageID <- FK
Body varchar(255) <- message Example : "Hello, how are you?"
Time_Message datetime
随时重新设计我的消息 table 设计以帮助我改进它。
你走在正确的轨道上。为组织和人员制作 table。 Link 他们返回 'users' 帐号或更好的整数 id 字段。每条消息还应该有一个 id 字段,用于将消息链接到用户。然后对于任何消息,您可以从适当的 table.
中找到用户和用户的信息不要使用 VARCHAR 作为您的 ID。使用 INT(或 bigint/long)并通过 table(mysql)或序列(oracle/postgres)
上的自动递增机制生成它在您的情况下,管理员和组织 is-a
用户,因此您可能需要考虑 database inheritance
。用户 table 是具有共享属性的基础。如果您没有共享属性,那么它只需要一个 user_id 列和一个 type discriminator
列,它们的值可以是 "admin" 或 "organization"。您的管理员和组织 table 的主键将是 user_id,它也将是返回给用户的外键。您可能希望在首先插入用户的管理员和组织上有 BEFORE INSERT triggers
,然后将生成的 user_id 注入相应的 table.
管理员是否将成为组织的官员名单?假设是这样:
user
----
user_id INT AUTO_INCREMENT PRIMARY KEY
user_type VARCHAR CHECK (user_type in ('admin', 'organization')) -- This is called the discriminator
-- other shared attributes go here, if any
admin -- this extends user
----
user_id INT PRIMARY KEY REFERENCES USER (id)
first_name VARCHAR
last_name VARCHAR
age INT
birth_date DATE
organization_id INT REFERENCES organization (user_id) -- an admin belongs to an organization
organization -- this extends organization
------------
user_id INT PRIMARY KEY REFERENCS USER (id)
name VARCHAR
incorporation_date DATE
现在,对于消息系统。我只想将您的 message
和 message
文本合并为一个。
message
-------
message_id INT AUTO_INCREMENT PRIMARY KEY
parent_message_id INT UNIQUE REFERENCES message (message_id) # This lets you keep track of replies
sender_id INT REFERENCES user (user_id)
receiver_id INT REFERENCS user (user_id)
dt DATETIME
message_body TEXT
当然,如果您希望能够发送给多个人而不是一个人:
message
-------
message_id INT PRIMARY KEY
parent_message_id INT UNIQUE REFERENCES message (message_id) # This lets you keep track of replies
sender_id INT REFERENCES user (user_id)
dt DATETIME
message_body TEXT
message_receiver
---------------
message_id PRIMARY KEY REFERENCES message (message_id)
receiver_id INT PRIMARY KEY REFERENCES user (user_id)
type VARCHAR CHECK (type in ('TO', 'CC", 'BCC')) -- This would let you do an normal email To, Carbon Copy, Blind Carbon Copy if you wished