免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項超值服

開通VIP
mysql-多個表之間的SQL多對多關(guān)系

我有一個嘗試在SQL上創(chuàng)建的數(shù)據(jù)庫,并且試圖將這些關(guān)系連接在一起.有三個表:superhero,power和superheroPower.表超級英雄和力量是由表superheroPower表示的多對多關(guān)系.

以下語法對于表(以及其他所有表)之間的外鍵是否正確?此外,關(guān)于這些表的設(shè)置,還有其他建議嗎?

CREATE TABLE superhero( id INT NOT NULL AUTO_INCREMENT, heroName VARCHAR(255) NOT NULL, firstName VARCHAR(255), lastName VARCHAR(255), firstAppearance DATE, gender VARCHAR(255), bio TEXT, universe VARCHAR(255), PRIMARY KEY(id)) ENGINE=InnoDB;CREATE TABLE power( id INT NOT NULL AUTO_INCREMENT, name VARCHAR(255) NOT NULL, description TEXT NOT NULL,PRIMARY KEY(id)) ENGINE=InnoDB;CREATE TABLE superheroPower( superheroID INT, powerID INT, PRIMARY KEY(superheroID, powerID), FOREIGN KEY(superheroID) REFERENCES superhero(id), FOREIGN KEY(powerID) REFERENCES power(id) ) ENGINE=InnoDB;

解決方法:

是的,那里的一切看起來還不錯.但…

一些注意事項:

對于性別列,我們將使用較短的數(shù)據(jù)類型;我看不到需要255個字符來表示. (強(qiáng)制執(zhí)行的行的最大大小是有限制的.)如果只有很少的值,我們將考慮使用ENUM數(shù)據(jù)類型.

我們還可能在其中的幾列上添加NOT NULL約束,例如英雄名,名字,姓氏.我們還可能添加DEFAULT”.有時候,出于某些原因,我們確實確實確實需要允許NULL值,但是我們會盡可能使用NOT NULL.

我對TEXT列猶豫不決.使用TEXT數(shù)據(jù)類型沒有錯,但是我只是懷疑那些數(shù)據(jù)可能“隱藏”了一些最好存儲在其他列中的信息.

對于外鍵,我們將按照使用的模式為約束分配一個名稱,并可能在ON UPDATE CASCADE ON DELETE CASCADE上添加

CONSTRAINT FK_superheroPower_power FOREIGN KEY (powerID)   REFERENCES power(id) ON UPDATE CASCADE ON DELETE CASCADE

關(guān)于標(biāo)識符的說明(表名和列名)

我們這樣做的方式是,所有表名都是小寫的. (我們有一個MySQL選項集,它強(qiáng)制所有表名都使用小寫.)我們這樣做是為了避免不同操作系統(tǒng)/文件系統(tǒng)的不兼容問題(其中一些區(qū)分大小寫,有些則不區(qū)分大小寫).

另外,表名是單數(shù).該表的名稱表示該表的一行所代表的含義.我們也沒有將_table作為名稱的一部分.

MySQL中的列名從不區(qū)分大小寫,但我們也總是對列名使用小寫.我們不會“ camelCase”列名,而是使用下劃線字符作為分隔符,例如power_id與powerID,hero_name與heroName.

跟進(jìn)

我上面的“注釋”不是必須遵循的特定規(guī)則;這些只是我們使用的模式.

遵循這些模式并不能保證我們將擁有成功的軟件,但確實可以幫助我們.

為了供您參考,我將展示這些表在我們商店中的“初切”效果,以說明另一種模式.這不是“正確的方法”,而只是我們作為團(tuán)隊所確定的“一種方法”.

CREATE TABLE superhero( id               INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'pk', hero_name        VARCHAR(255) NOT NULL                COMMENT '', first_name       VARCHAR(255) NOT NULL DEFAULT ''     COMMENT '', last_name        VARCHAR(255) NOT NULL DEFAULT ''     COMMENT '', first_appearance DATE                                 COMMENT 'date superhero first appeared', gender           ENUM('female','male','other')        COMMENT 'female,male or other', biography_text   TEXT                                 COMMENT '', universe         VARCHAR(255)                         COMMENT '', PRIMARY KEY(id), UNIQUE KEY superhero_UX1 (hero_name) ) ENGINE=InnoDB;CREATE TABLE power( id               INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'pk', name             VARCHAR(255) NOT NULL                COMMENT ''  , description_text TEXT NOT NULL                        COMMENT '' , PRIMARY KEY(id), UNIQUE KEY power_UX1 (name)) ENGINE=InnoDB;CREATE TABLE superheropower( superhero_id   INT UNSIGNED NOT NULL         COMMENT 'pk, fk ref superhero', power_id       INT UNSIGNED NOT NULL         COMMENT 'pk, fk ref power', PRIMARY KEY(superhero_id, power_id), CONSTRAINT FK_superheropower_superhero      FOREIGN KEY(superhero_id) REFERENCES superhero(id)     ON UPDATE CASCADE ON DELETE CASCADE, CONSTRAINT FK_superheropower_power     FOREIGN KEY (power_id) REFERENCES power(id)      ON UPDATE CASCADE ON DELETE CASCADE) ENGINE=InnoDB;
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
[原創(chuàng)]貢獻(xiàn)一個學(xué)生成績管理系統(tǒng)的代碼 - J2EE論壇 - JAVA論壇 - 編程論壇
DELETE CASCADE級聯(lián)刪除
MySql外鍵設(shè)置詳解
mysql中的外鍵使用
MySQL 約束
Oracle中的約束
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服