【问题标题】:Database structure relational database数据库结构关系数据库
【发布时间】:2012-07-10 02:34:41
【问题描述】:

我正在为一个小型公寓管理网站创建数据库。

基本上会有一个用户登录表单,他们可以在其中插入他们的公寓、描述、照片。由于我将使用关系表,因此我想确保我正在创建正确的数据库。有人可以看看并发表意见吗?

USERS:
  - id_user;
  - username;
  - password;
  - email;

APARTMENTS:
  - id_apartment;
  - id_user;
  - title;
  - description;
  - map;
  - gallery;

GALLERY_IMAGES:
  - id_gallery;
  - id_apartment;
  - image;

【问题讨论】:

  • 公寓里的画廊区有什么用?您不需要关键字段,因为您在 gallery_images 表中有它。
  • @chiborg 在apartments 中可能是galleryboolean。不过,我认为这不是必需的。
  • 一间公寓可以有两个或更多的业主吗?

标签: php mysql database database-design relational-database


【解决方案1】:

看起来您的设计只允许“公寓”与单个用户相关。

我建议每个表的主键是一个名为id 的整数列。 并且对该主键的任何外键引用都将命名为tablename_id

您需要查看关系的基数。 一个“用户”可以与多个“公寓”相关联吗? 一个“公寓”可以与多个“用户”相关吗? 一个“图像”可以与多个“公寓”相关联吗? 等等

当我们找到“多对多”关系时,我们通常使用关系表来解决它。

如果一个“公寓”可以与多个“用户”相关,给定...

apartment (id PK, ... )

user (id PK, ... )

我们将添加第三个表,外键组合是唯一的

user_apartment ( user_id FK, apartment_id FK, UNIQUE KEY (user_id, apartment_id) )

您似乎有一个“画廊”的概念,这与您的“图像”概念不同。 (考虑可以“唯一识别”并且您想要存储相关信息的实例。)

一张图片可以在多个画廊中吗? 一个画廊可以有多个图像吗? 一个画廊可以与多个公寓相关联吗?

如果一张图片只属于一个画廊,而一个画廊只与一个公寓相关,那么我将实现为...

gallery (id PK, apartment_id FK, ... )  
image (id PK, gallery_id FK, ...)

【讨论】:

  • 使用 id 作为 id 字段的名称是 SQl 反模式。
  • @HLGEM:使用名为id 的列作为每个表的主键是一种可行的方法,它具有一些显着的优势。也有一些困难。这些困难不仅仅通过使用除 id 之外的名称作为主键列而消失。
【解决方案2】:

如果这确实是你的场景:(我猜)

公寓属于用户 公寓有 0 张或更多图片

那你为什么要引入画廊的概念呢?

USERS:
- id_user;
- username;
- password;
- email;

APARTMENTS:
- id_apartment;
- id_user;
- title;
- description;
- map;

IMAGES:
- id_image
- id_apartment;
- image_path;

如果是这种情况,那么画廊实际上就是公寓的图像,我的意思是在你的 GUI 上这样称呼它...

有些用户有不止一套公寓吗?

【讨论】:

    猜你喜欢
    • 2013-09-13
    • 1970-01-01
    • 1970-01-01
    • 2011-04-02
    • 2014-07-22
    • 2015-12-03
    • 2010-10-10
    • 2013-08-21
    • 1970-01-01
    相关资源
    最近更新 更多