lau*_*kok 5 mysql database-design entity-framework mysql-5.5 subtypes
我将此person表作为超级父级(或超类型),
id
firstname
lastname
email
telephone
...
...
Run Code Online (Sandbox Code Playgroud)
和user表作为孩子(或子类型)
id
person_id (FK)
password
username
screenname
...
...
Run Code Online (Sandbox Code Playgroud)
它们必须是一对一 ( 1:1 ) 的关系,因为用户不能重复两次,因此给定人员行中的特定电子邮件值不能重复两次。
然后我有这张message表,它存储来自任何人的消息,
id
firstname
lastname
email
telephone
subject
content
...
...
Run Code Online (Sandbox Code Playgroud)
但可以看到的是firstname,lastname,email,telephone被复制的message表。
所以,我想把它参考person下面的表格,
id
person_id
subject
content
...
Run Code Online (Sandbox Code Playgroud)
但随后似乎并不正确,因为一个人具有相同的电子邮件,名称等可以发送邮件给我很多次他们想要的,所以细节他/提供可重复她。
那么,我应该message作为person父母的孩子还是他们应该是独立的实体?
或者,有没有更好的建议来解决这个问题?
我有一张
person桌子。
很好(只是更改了PK列的名称):
person
------
person_id PK
firstname
lastname
email
telephone
...
...
Run Code Online (Sandbox Code Playgroud)
和作为孩子的用户表。它们必须是 1:1 的关系,因为一个用户不能重复两次。
如果关系是 1:1(假设它person是 supertpe 并且user是子类型,您可以使用与主键和外键相同的列来处理这个问题person:
user
----
person_id PK FK to person(person_id)
password
username
screenname
...
...
Run Code Online (Sandbox Code Playgroud)
因此 person 行中的电子邮件不得重复两次。
UNIQUE在person.email列中添加约束。
然后我有这个消息表,它存储来自任何人的消息,但您可以看到名字、姓氏、电子邮件、电话在消息表中重复。所以我想把它引用到像下面这样的人表。
很好(根据之前的更改进行了调整)。但是您还需要存储谁发送消息以及谁是接收者:
message
-------
message_id PK
sender_id FK to user(person_id) --- or to person(person_id)
receiver_id FK to user(person_id) --- that depends on your requirements
subject
content
...
Run Code Online (Sandbox Code Playgroud)