mysql - 正确建立我的数据库表

标签 mysql database

我最初的逻辑有缺陷

任何对建立数据库、创建表等稍微熟悉的人都会立即看到我最初的数据库建立逻辑是完全有缺陷的,是糟糕的做法。下面是一些片段;

  • 产品
    • 音乐
      • ...
    • 书籍
      • ...
    • 游戏
      • 控制台_游戏
        • 开发人员
          • 身份证
          • 姓名
          • 网站
        • 制造商
          • 身份证
          • 姓名
          • 网站
        • 出版商
          • 身份证
          • 姓名
          • 网站
        • 流派
        • 平台
          • 身份证
          • 平台
          • 概览
          • 开发人员
          • 制造商
          • ...

经过一番研究...

我现在了解到,类似数据库文件根的结构并不是前进的方向,而是在根下有多个表,可以这么说;

  • Console_Games_Developers - 表格
    • ID - int NOT NULL
    • 名称​​- varchar(255)
    • 网站- varchar(255)
  • Console_Games_Manufacturers - 表格
    • ID - int NOT NULL
    • 名称​​- varchar(255)
    • 网站- varchar(255)
  • Console_Games_Publishers - 表格
    • ID - int NOT NULL
    • 名称​​- varchar(255)
    • 网站- varchar(255)

生成的 SQL 查询

CREATE TABLE User_Interests
(
        UserID int NOT NULL,
        MovieInterests TEXT,
        TVShowInterests TEXT,
        BookInterests TEXT,
        MusicInterests TEXT,
        PRIMARY KEY (UserID)
);
CREATE TABLE Game_Developers
(
        GameDevID int NOT NULL,
        Name varchar(255),
        Website varchar(255),
        PRIMARY KEY (GameDevID)
);
CREATE TABLE Game_Manufacturers
(
        GameManufactID int NOT NULL,
        Name varchar(255),
        Website varchar(255),
        PRIMARY KEY (GameManufactID)
);
CREATE TABLE Game_Publishers
(
        GamePublisherID int NOT NULL,
        Name varchar(255),
        Website varchar(255),
        PRIMARY KEY (GamePublisherID)
);

具体信息 - 问题

  1. 我如何实现这样的数据库
    • 好吧,我已经添加了我尝试/研究过的内容,但我不知道这实际上是否是正确的前进方向?
  2. 我使用的标识符正确吗?
    • 当我使用“标识符”这个词时,我的意思是: int NOT NULL 和 varchar(255)。

最佳答案

这可能会帮助您开始:

产品类型:这可以是游戏、电影、书籍或音乐

create table Product_Type( id INT, description VARCHAR( 1024 ), ... ) 

产品子类型:这可能是控制台游戏

create table Product_Sub_Type( id INT, description VARCHAR( 1024 ), product_type_id, ... ) 

Relation_Type 这将是产品的开发商或制造商

create table Relation_Type( id INT, description VARCHAR( 1024 ), ... ) 

关系:这是开发者、制造商等关系的原型(prototype)。

create table Relation( id INT, description VARCHAR( 1024 ), relation_type_id INT, ... ) 

Relation_Info_type:网站、名称、地址等信息类型

create table Relation_Info_Type( id INT, description VARCHAR( 1024 ), ... ) 

Relation_Info:这可以是名称、地址或网站。 (如果该关系有多个地址或网站)

create table Relation_Info( id INT, relation_id INT, relation_info_type_id INT, description VARCHAR( 1024 ), ... )

Product_Relation:这将是将关系与产品链接起来的多对多方式,例如开发商和制造商。

create table product_relation( id INT, relation_id INT, product_id INT, relation_info_type_id INT, description VARCHAR( 1024 ), ... )

为了保持简单(和灵活),您可以对类型(复古、 Action 、冒险、益智)执行相同的操作: 接下来是多对多表,例如

create table genre( id INT, description VARCHAR( 1024 ), ... )
create product_genre( id INT, product_id INT, genre_id INT, ... )

对于平台(Windows、IOS、Ubuntu、Android):

create table platform( id INT, description VARCHAR( 1024 ), overview VARCHAR( 4096 ), developer_id, manufacturer_id,... )
create table platform_product( id INT, platform_id, product_id, ... )

这些产品例如《星际穿越》或《最终幻想 VII》游戏

create table Products ( id INT, description VARCHAR( 1024 ), product_sub_type_id INT, ... )

所有 [name]_id 列都应被读取为与表 [name] 具有外键关系,但引用表 Relation 的开发者_id 和制造商_id 除外。

关于mysql - 正确建立我的数据库表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28917898/

相关文章:

mongodb - 对于只有部分数据易失的非常大的数据集,MongoDB 如何叠加

mysql - SQL查询根据同一字段中的2个不同值和条件选择记录

MySQL GROUP 除非值等于 0

ruby-on-rails - 使用 git 流分支时的数据库问题(孤立迁移)

mysql - 如何在 ubuntu 服务器 10.10 上使用命令行在 MYSQL 中一次性备份 1 个以上数据库?

database - 使用触发器更新基于另一个表插入的表行?

SQL Server 服务代理

php - MySql 获取 id = xxx 且具有相同 id 的行中其他表中的最新列大于 1 的所有行

mysql - SQL附加其他表的行

php - SELECT DISTINCT 返回重复项