表单的数据库模式

时间:2018-04-04 13:24:57

标签: mysql sql

我想创建一个数据库,以便我可以自动填写表单。但我不知道如何设置数据库。

我想为特定的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 1categorieName。它可以用于这个数据库设置吗?

谢谢你的时间!

2 个答案:

答案 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