私はスタンプ収集Webアプリケーションを構築し始めています。 Python /フラスコバックエンド(私と思う:))は、データベースとしてのMySQL。私はdbデザインについて多くのことを知らないので、私が思ったやり方で本当にばかげたミスをしたら、そのことを覚えておいてください。私は3つのテーブルにデータを分割することを考えていた。ユニークでないエントリを持つジャンクションテーブル
- ユーザーテーブル(すべてのユーザーが、このテーブルへの登録時に添加する必要があります)
- スタンプテーブルのuser_idとstamp_idで
- 所有するテーブル(交差テーブルを(すべてのスタンプはここに常駐し、私だけで変更すべきです)外部キーとして)
質問:user_idとstamp_idをプライマリキーとして配置すると、このタイプのユニークなエントリが1つだけ存在します。たとえば、user_1にはcard_1があります。しかし、user_1にはcard_1が重複している可能性がありますので、2行にすることをお勧めします。 user_1 card_1 user_1 card_1 もう一つの問題は所有スタンプの状態を含めることです。例えば、user_1は、ミント状態のcard_1と悪い状態のcard_1を持つかもしれません。私が理解する限り、user_1のユニークなペアは1つしか入力できません。希望の結果を得るために私は何ができますか?これを行うより良い方法があれば、私に知らせてください。
追加の質問。私はそれが生成するSQLについての質問があるので、私はdbをプロットしようとmysqlのworkbenchを使用していた。 CONSTRAINT "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`));
だから、テーブルは次のようになっているはずです:user_id stamp_id stamp_state stamp_quantity? user_id_stamp_id_state_stateを主キーにしますか? – pocorschi