我是mysql的新手..我想询问数据库设计,我会附上我的设计(对不起,我已经阻止发布图片)..所以我将输入数据库。你可以告诉我哪一个更好,原因..或者这种数据库有更好的设计。??
首先设计:
tbl_member:
- id
- name
tbl_member_parent:
- id
- id_member
- parents_name
tbl_member_sibling:
- id
- id_member
- sibling_name
或第二种设计:
tbl_member:
- id
- name
tbl_relation_type:
- id
- relation:"parent","sibling"
tbl_member_relation:
- id
- id_member
- id_relation_type
- name_value
也许接下来,我将在relation_type中添加(10-20)行(如朋友,邻居)。
在我看来我应该使用第二个,但我不太确定..大声笑
对不起,如果我的英语不好......
很多..
@inhan
ic2 ..是的,我也是这样想的。
这是我的迷你数据库设计..
原件:
因此,人们可以拥有多个昵称,兄弟姐妹,朋友,工作,国籍等。性表
- id INT auto_increment PK
- sex varchar:“male”,“female”
状态表:
- id INT auto_increment PK
- status varchar:“active”,“notActive”,“problem”
特权表:
- id INT自动增量PK
- 特权varchar:“经理”,“主持人”,“成员”
国家/地区表:
- id INT auto_increment PK
- country varchar
城市表:
- id INT auto_increment PK
- 城市varchar
- id_country INT,FK(到country table.id)
工作表:
- id INT auto_increment PK
- 工作变量
会员表:
- id INT auto_increment PK
- member_name varchar
- 出生日期
- id_sex INT,FK(对于sex table.id)
- id_status INT,FK(到状态table.id)
- id_privilige INT,FK(to privilege table.id)
- 地址varchar
- id_city INT,FK(到city table.id)
memberJob table:
- id INT auto_increment PK
- id_member INT,FK(到成员table.id)
- id_job INT,FK(到job table.id)
memberNationality表:
- id INT auto_increment PK
- id_member INT,FK(到成员table.id)
- id_country INT,FK(到country table.id)
然后make memberNickname表; memberSiblings表; memberFriends表等等
我想更改memberJob的表格设计; memberNationality; memberSiblings; memberFriends
我想这样做:
关系表
- id INT auto_increment PK
- 关系类型varchar:“兄弟姐妹”,“朋友”,“工作”,“国籍”,
memberDetail
- id INT auto_increment PK
- id_member INT,FK(到成员table.id)
- id_relation INT,FK(关系table.id)
- id_value INT,FK(如果id_relation:兄弟和朋友然后id_value FK到成员table.id;如果id_relation:job然后id_value FK到作业table.id;如果id_relation:国籍那么id_value FK到国家table.id)memberNickname
- id INT PK auto_increment
- id_member INT FK(到成员table.id)
- 昵称varchar
那有什么不对吗?
答案 0 :(得分:0)
包含以下列的单个表members
就可以了。
id
INT auto_increment PK name
parent_id
INT默认为NULL,FK(至id
)因此,当您查询所有需要做的事情时,请使用相同的表来加入。那些没有parent_id
的人将是最高级别的成员,而其他人则是儿童。要找到兄弟姐妹,您需要做的就是找到指向同一父母的孩子。
[编辑1]
如果您想拥有其他类型的关系,那么您可以创建另外两个表并忽略上表中的parent_id
列。
relationshipTypes
表
id
INT auto_increment PK rel_name
和relationships
表:
id
INT PK user_id
INT,FK(至members.id
)rel_type_id
INT,FK(至relationshipTypes.id
)因此,您可以从members
中选择用户,然后在relationships
中找到所有匹配的记录,并将其与relationshipTypes
结合使用,以便获得所有信息。
[对OP的评论]
以下评论是我个人的想法。
sex
,status
,privilege
表格是不必要的,因为每个成员只能拥有1个性别(性别),1个身份和1个特权,所有这些都可以被强制执行({ {1}},在技术上讲,在ENUM
表中。member
表。member
数据保存在city
表中(作为VARCHAR),同时保留member
到country
表的FK。这些信息的机会可能很大,因此看起来不太可行。对于您的系统,如果您想要关注特定国家/地区(目标市场),那么您可以拥有一个包含该国家/地区城市列表的受限列,另外还有一个“其他”选项,并为该“其他”城市创建一个额外列,其数据类型为country
。