我想创建一个数据库,以便我可以自动填写表单。但我不知道如何设置数据库。
我想为特定的websiteID
创建表单,并向该网站添加多个Categories
,其中Items
附加到该类别。
现在是我的数据库:
CREATE TABLE `tblWebsite` (
`websiteId` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
`websiteNaam` varchar(255) NOT NULL,
`websiteUrl` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `tblCategories` (
`categorieId` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
`websiteId` int NOT NULL,
`categorieName` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `tblItems` (
`itemId` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
`categorieId` int NOT NULL,
`itemName` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
例如:itemId 1
位于categorieId 1
的{{1}}
因此,当我选择websiteId 1
时,我想为该网站显示websiteId 1
和categorieName
。它可以用于这个数据库设置吗?
谢谢你的时间!
答案 0 :(得分:1)
如果使用像https://www.lucidchart.com/这样的工具直观地计算出数据库的架构,那么你将会为自己省去很多痛苦。
您要执行的操作是各种ID变量的表之间的JOIN
。这应该适用于您的架构,但为了使其更强大,您应该使用FOREIGN KEY
。例如,您应该categorieId
中的tblItems
FOREIGN KEY
categorieId
tblCategories
tblItems
。这样可以确保categorieId
中的每个项目都有一个有效的tblCategories
,可以将其与object Create_Ignite_Cache {
case class Custom_Class(
@(QuerySqlField @field)(index = true) a: String,
@(QuerySqlField @field)(index = true) b: String,
@(QuerySqlField @field)(index = true) c: String,
@(QuerySqlField @field)(index = true) d: String,
@(QuerySqlField @field)(index = true) e: String,
@(QuerySqlField @field)(index = true) f: String,
@(QuerySqlField @field)(index = true) g: String,
@(QuerySqlField @field)(index = true) h: String
)
def main(args: Array[String]): Unit = {
val spi = new TcpDiscoverySpi
val ipFinder = new TcpDiscoveryMulticastIpFinder
val adresses = new util.ArrayList[String]
adresses.add("127.0.0.1:48500..48520")
ipFinder.setAddresses(adresses)
spi.setIpFinder(ipFinder)
val cfg = new IgniteConfiguration().setDiscoverySpi(spi).setClientMode(true)
val cache_conf = new CacheConfiguration[String, Custom_Class]().setCacheMode(CacheMode.PARTITIONED).setAtomicityMode(CacheAtomicityMode.ATOMIC).setBackups(1).setIndexedTypes(classOf[String], classOf[Custom_Class]).setName("Spark_Ignite")
val ignite = Ignition.getOrStart(cfg)
ignite.getOrCreateCache(cache_conf)
System.out.println("[INFO] CACHE CREATED")
ignite.close()
}
}
相关联。
答案 1 :(得分:0)
首先,对于规范化,您需要在网站和类别以及类别和项目之间创建链接表。因为网站可以有许多类别,并且类别可以与许多网站相关联。与类别和项目相同。
请参阅新的数据库结构(也请原谅我糟糕的MySql技能)。
CREATE TABLE `tblWebsite` (
`websiteId` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
`websiteNaam` varchar(255) NOT NULL,
`websiteUrl` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `tblCategories` (
`categorieId` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
`categorieName` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `tblWebsiteCategories` (
`websiteId` int(11) NOT NULL,
`categorieId` int(11) NOT NULL,
PRIMARY KEY (`websiteId`,`categorieId`),
UNIQUE KEY `FK_tblWebsite_websiteId` (`websiteId`),
UNIQUE KEY `FK_tblCategories_categorieId` (`categorieId`),
CONSTRAINT `FK_tblWebsiteCategories_Website` FOREIGN KEY (`websiteId`) REFERENCES `tblWebsite` (`websiteId`),
CONSTRAINT `FK_tblWebsiteCategories_Categories` FOREIGN KEY (`categorieId`) REFERENCES `tblCategories` (`categorieId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `tblItems` (
`itemId` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
`itemName` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `tblCategorieItems` (
`categorieId` int(11) NOT NULL,
`itemId` int(11) NOT NULL,
PRIMARY KEY (`categorieId`,`itemId`),
UNIQUE KEY `FK_tblCategories_categorieId` (`categorieId`),
UNIQUE KEY `FK_tblCategories_itemId` (`itemId`),
CONSTRAINT `FK_tblCategorieItems_Categories` FOREIGN KEY (`categorieId`) REFERENCES `tblCategories` (`categorieId`),
CONSTRAINT `FK_tblCategorieItems_Items` FOREIGN KEY (`itemId`) REFERENCES `tblItems` (`itemId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
然后是你的SELECT语句。
SELECT c.CategorieName,
i.itemName
FROM tblWebsiteCategories wc
INNER JOIN tblCategories c
ON c.categorieId = wc.categorieId
INNER JOIN tblCategorieItems ci
ON ci.categorieId = c.categorieId
INNER JOIN tblItems i
ON ci.itemId = i.itemId
WHERE wc.websiteId = 1