0

我是 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 

也许接下来,我会在 relative_type 中添加 (10-20) 行(如朋友、邻居)。

在我看来,我应该使用第二个,但我不太确定.. 哈哈

对不起,如果我的英语不好..

多谢..


@inhan
ic2 .. 是的,我也这么认为..
这是我的迷你数据库设计..

原来的:

性别表
- id INT auto_increment PK
- 性别 varchar:“男性”、“女性”

状态表:
- id INT auto_increment PK
- 状态 varchar :"active","notActive","problem"

权限表:
- id INT 自动递增 PK
- 权限 varchar:"manager","moderator","member"

国家表:
- id INT auto_increment PK
- 国家 varchar

city table:
- id INT auto_increment PK
- city varchar
- id_country INT, FK(to country table.id)

作业表:
- id INT auto_increment PK
- 作业 varchar

成员表:
- id INT auto_increment PK
- member_name varchar
- 出生日期
- id_sex INT, FK(到 sex table.id)
- id_status INT,FK(到 status table.id)
- id_privilige INT, FK(到 privilege table.id)
- address varchar
- id_city INT, FK(到city table.id)

因为,人们可以有多个昵称、兄弟姐妹、朋友、工作、国籍等

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(到 member table.id)
- id_country INT, FK(到 country table.id)

然后制作 memberNickname 表;memberSiblings 表;memberFriends 表等

我想更改 memberJob 的表格设计;成员国籍;成员兄弟姐妹;会员朋友


我想这样做:

关系表
- id INT auto_increment PK
- 关系类型 varchar : "siblings", "freinds", "job", "nationality",

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

这有什么问题吗??

4

1 回答 1

0

members具有以下列的单个表就可以了。

  • idINT auto_increment PK
  • name
  • parent_idINT 默认 NULL, FK (to id)

因此,当您查询时,您需要做的就是使用同一张表进行连接。那些没有parent_id将是最高级别的成员,而其他人将是孩子。要找到兄弟姐妹,您需要做的就是找到指向同一个父母的孩子。

[编辑 1]

如果您想拥有其他类型的关系,那么您可以创建 2 个其他表并忽略parent_id上表中的列。

relationshipTypes桌子

  • idINT auto_increment PK
  • rel_name

relationships表:

  • id智力PK
  • user_idINT,FK(到members.id
  • rel_type_idINT,FK(到relationshipTypes.id

因此,您可以从中选择用户members,然后在 中查找所有匹配的记录relationships,将其加入,relationshipTypes以便您拥有所有信息。

[对OP的评论]

以下言论是我个人的想法。

  1. 您的sex, status,privilege表是不必要的,因为每个成员只能有 1 个性别(性别)、1 个身份和 1 个特权,所有这些都可以ENUM在表中枚举(从技术上讲)member
  2. 另外,我会忘记多个国籍并让用户选择 1 个国籍。所以这些数据也可以移动到member表中。
  3. 我将再次将city数据保留在表中(作为 VARCHAR),同时为to表member保留 FK 。此信息的机会可能很大,因此看起来不可行。对于您的系统,如果您想专注于特定国家(目标市场),那么您可以有一个包含该国家城市列表的枚举列,加上一个“其他”选项并为该“其他”城市创建一个附加列,可以是 datatype 。countrycountryVARCHAR
  4. 处理工作由您决定。我不知道您希望您的视觉形式是什么样的。
于 2013-01-30T10:22:54.373 回答