mysql - 具有非唯一条目的连接表

标签 mysql database

我开始构建一个集邮网络应用程序。 Python/flask 后端(我认为:)) mySQL 作为数据库。我对数据库设计不太了解,所以如果我按照我的想法犯了一些非常愚蠢的错误,请记住这一点。我正在考虑将数据分成 3 个表。

  • 用户表(所有用户应在注册时添加到此表中)
  • 邮票表(所有邮票都应驻留在此处,并且只能由我修改)
  • 拥有的表(以 user_id 和 stamp_id 作为外键的联结表)

问题:如果我将 user_id 和 stamp_id 作为主键,则只会有一个此类型的唯一条目,例如 user_1 有 card_1。但 user_1 可能有 card_1 的重复项,所以我应该有 2 行 user_1 卡_1 user_1 卡_1 出现的另一个问题是我想包括拥有的邮票的状态。例如,user_1 可能有一张状况良好的卡_1 和一张状况不佳的卡_1。据我了解,我只能输入一对唯一的 user_1 card_1 。我该怎么做才能得到想要的结果?另外,如果有更好的方法,请告诉我。

附加问题。我正在使用 mysql 工作台尝试绘制数据库,所以我对它生成的 sql 有疑问。约束“fk_gibberish”,这是正常的还是......为什么会这样?

CREATE  TABLE IF NOT EXISTS `stampcollect`.`users` (
  `user_id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
  `user_username` VARCHAR(45) NULL ,
  `user_password` VARCHAR(45) NULL ,
  `user_email` VARCHAR(45) NULL ,
  PRIMARY KEY (`user_id`) )

CREATE  TABLE IF NOT EXISTS `stampcollect`.`stamps` (
  `stamp_id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
  `stamp_name` VARCHAR(45) NULL ,
  PRIMARY KEY (`stamp_id`) )

CREATE  TABLE IF NOT EXISTS `stampcollect`.`owned` (
  `user_id` INT NOT NULL ,
  `stamp_id` INT NOT NULL ,
  `stamp_status` BIT NULL ,
  PRIMARY KEY (`user_id`, `stamp_id`) ,
  INDEX `fk_{F5DBEF0D-24E0-4AFF-A5CB-2A6A0D448C96}` (`stamp_id` ASC) ,
  CONSTRAINT `fk_{22B4468E-A5FB-4702-A8A9-576AA48A0543}`
    FOREIGN KEY (`user_id` )
    REFERENCES `stampcollect`.`users` (`user_id` ),
  CONSTRAINT `fk_{F5DBEF0D-24E0-4AFF-A5CB-2A6A0D448C96}`
    FOREIGN KEY (`stamp_id` )
    REFERENCES `stampcollect`.`stamps` (`stamp_id` ));

最佳答案

如果用户可以在多个州拥有相同的邮票,那么该州应该进入“拥有”表并成为 key 的一部分。如果他可以拥有同一张邮票的多个副本,那么在该表中拥有一个“数量”列(不是 key 的一部分)是有意义的。

关于mysql - 具有非唯一条目的连接表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6864351/

相关文章:

java - 管理用户、他们的角色、模块和权限的更合适的方法是什么?

c# - 基于本地文件的 SQL Server

php - 如何从标签列表的标签栏中准确选择标签?

mysql - 试图弄清楚如何找到最大计数

php - sql命令无法正确执行

c# - 将图像作为二进制数据存储在数据库中

ios - Realm 是一个什么样的数据库?

android - SQLite 约束异常 : UNIQUE constraint failed

mysql - Docker容器仅在附加卷时停止运行

php - 从 MySQL 检索数据并显示