我是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)行(比如朋友、邻居)。
我认为我应该用第二个,但我不太确定..。LOL
抱歉如果我的英语不好..。
很多..。
@inhan
ic2..是啊,我也这么想..。
这是我的迷你数据库设计。
原件:
性别表 - id INT auto_increment PK
成员表:
因为,人们可以有一个以上的昵称,兄弟姐妹,自由,工作,国籍等。
memberJob表: - 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 (to country table.id),然后生成memberNickname表;memberSiblings表;memberFriends表等。
我想更改memberJob的表设计;成员国性;成员关系;memberFriends
我想这样做:
关系表 - id INT auto_increment PK - relation类型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到job table.id;如果id_relation:nationality那么id_value FK到country table.id) memberNickname - id INT PK auto_increment - id_member INT FK (致成员table.id) - 昵称varchar
这有什么问题吗??
发布于 2013-01-30 10:22:54
有以下列的单个表members就可以了。
id INT auto_increment PKnameparent_id INT默认值为空,FK (到id)因此,当您查询时,您需要做的就是使用相同的表进行连接。没有parent_id的人将是最高级的成员,而其他人则是孩子。要找到兄弟姐妹,你需要做的就是找到指向同一个父母的孩子。
编辑1
如果您想要有其他类型的关系,那么您可以创建另外两个表,并忽略上表中的parent_id列。
relationshipTypes表
id INT auto_increment PKrel_name和relationships表:
id INT PKuser_id INT,FK (至members.id)rel_type_id INT,FK (至relationshipTypes.id)因此,您可以从members中选择用户,然后在relationships中查找所有匹配的记录,并将其与relationshipTypes连接,从而获得所有信息。
对OP的注释
以下是我个人的想法。
sex、status、privilege表是不必要的,因为每个成员只能有一个性别(性别)、一个状态和一个特权,所有这些都可以在member表中进行加密(ENUM,技术上来说)。member表中。city数据保存在member表(作为VARCHAR)中,同时为country到country表保留一个FK。获得这一信息的机会可能是巨大的,因此它看起来是不可靠的。对于您的系统来说,如果您想关注某个特定国家(目标市场),那么您可以使用该国家的城市列表创建一列,再加上一个“其他”选项,并为该“其他”城市创建一个额外的列,该列可以是数据类型VARCHAR。https://stackoverflow.com/questions/14601378
复制相似问题