首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >询问mysql数据库设计

询问mysql数据库设计
EN

Stack Overflow用户
提问于 2013-01-30 10:10:56
回答 1查看 172关注 0票数 0

我是mysql的新手..。我想问关于数据库设计的问题,我会附上我的设计(对不起,我阻止了发布图片)。所以我会输入数据库。你能告诉我哪一个更好吗?原因。或者有更好的设计,这类数据库。?

第一设计:

代码语言:javascript
复制
tbl_member:
- id
- name

tbl_member_parent:
- id
- id_member
- parents_name

tbl_member_sibling:
- id
- id_member
- sibling_name

或第二种设计:

代码语言:javascript
复制
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

  • 性别变量:“男性”、“女性”地位表:
  • INT auto_increment PK
  • 状态变量:“活动”、"notActive“、”问题“特权表:
  • 自动增量PK
  • “经理”、“主持人”、“成员”国家表:
  • INT auto_increment PK
  • 国家情况表:
  • INT auto_increment PK
  • 市变
  •  id_country INT,FK(to country table.id)职务表:
    • INT auto_increment PK
    • 职称

    成员表:

    • INT auto_increment PK
    •  member_name静脉曲张
    • 出生日期
    •  id_sex INT,FK (对性table.id)
    •  id_status INT,FK (到table.id状态)
    •  id_privilige INT,FK (授予table.id特权)
    • 地址;地址
    •  id_city INT,FK (到城市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 (致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

这有什么问题吗??

EN

回答 1

Stack Overflow用户

发布于 2013-01-30 10:22:54

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

  • id INT auto_increment PK
  • name
  • parent_id INT默认值为空,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表是不必要的,因为每个成员只能有一个性别(性别)、一个状态和一个特权,所有这些都可以在member表中进行加密(ENUM,技术上来说)。
  2. 另外,我会忘记多个国籍,让用户选择一个国籍。因此,这些数据也可以移动到member表中。
  3. 我将再次将city数据保存在member表(作为VARCHAR)中,同时为countrycountry表保留一个FK。获得这一信息的机会可能是巨大的,因此它看起来是不可靠的。对于您的系统来说,如果您想关注某个特定国家(目标市场),那么您可以使用该国家的城市列表创建一列,再加上一个“其他”选项,并为该“其他”城市创建一个额外的列,该列可以是数据类型VARCHAR
  4. 工作由你来处理。我不知道你想要你的视觉形象是什么样子。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14601378

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档