请教mysql数据库设计

时间:2013-01-30 10:10:56

标签: mysql database

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

那有什么不对吗?

1 个答案:

答案 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的评论]

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

  1. 您的sexstatusprivilege表格是不必要的,因为每个成员只能拥有1个性别(性别),1个身份和1个特权,所有这些都可以被强制执行({ {1}},在技术上讲,在ENUM表中。
  2. 另外,我会忘记多个国籍,并让用户选择1个国籍。因此,这些数据也可以移动到member表。
  3. 我会再次将member数据保存在city表中(作为VARCHAR),同时保留membercountry表的FK。这些信息的机会可能很大,因此看起来不太可行。对于您的系统,如果您想要关注特定国家/地区(目标市场),那么您可以拥有一个包含该国家/地区城市列表的受限列,另外还有一个“其他”选项,并为该“其他”城市创建一个额外列,其数据类型为country
  4. 处理工作取决于您。我不知道你想要的视觉形式是什么样的。