MySQL - 代表一个数组

时间:2017-05-06 13:49:50

标签: mysql

我想创建一个可以存储家庭数据的数据库结构(主键,名称及其成员)。

我提出了使用这两个表来实现它的想法:

TABLE "family":
- id (INT)
- name (VARCHAR)
- members (?)

TABLE "members"
- id (INT)
- name (VARCHAR)

我想通过成员表中的id引用该族的成员。但由于MySQL没有数组,我怎么能在一列中存储多个成员呢?或者这种情况下有更好的数据库结构吗?

Kenta1561

3 个答案:

答案 0 :(得分:1)

请勿尝试将多个值存储在单个单元格中作为数组。以后当您必须根据这些数组中的某个值搜索行或使用该列和该类别的其他操作连接表时,它将成为您的噩梦。

您可以为其创建一个单独的映射表,以保持标准化。

您可以创建一个单独的表family_members,例如,三列:

id (auto increment), 
family_id (FK to family table), 
member_id (FK to members table)

如果有一对多的映射,或者在members表中有一个额外的列作为FK到族表。

如果可以存在多对多的映射,则映射表会有所帮助。

答案 1 :(得分:1)

Member_Id

中创建tblFamily的外键
TABLE "tblFamily":
- Fam_Id (INT)
- Family_Name (VARCHAR)
- Member_Id (INT)

Member_Id

中创建tblMember的主键
TABLE "tblMembers"
- Member_Id (INT)
- Member_Name (VARCHAR)

答案 2 :(得分:0)

您可以尝试以下结构:

Table "Family"
- FAMILY_ID INT (PK)
- FAMILY_NAME VARCHAR

现在,由于您的家庭可以拥有多个成员,因此不要将member_id存储在族表中,最好将FAMILY_ID存储在MEMBERS表中。

Table "Member"
- MEMBER_ID INT (PK)
- MEMBER_NAME VARCHAR
- FAMILY_ID INT (FK) REFERENCES FAMILY.FAMILY_ID

这样您就可以为一个家庭存储多个成员,并且在这些表上使用连接将能够在单个查询中打印有关该族的所有信息。