数据库
首页 > 数据库> > php-动态类别的数据库架构

php-动态类别的数据库架构

作者:互联网

Added Update #1. Please check at the end of the question. Thanks.

朋友们

我正在设计一个带有类别和与类别相关联的过滤器的产品清单.我目前有一个带有静态类别的数据库架构.我必须使它们充满活力.我找不到合适的架构来使其动态化,因此我在表单中对架构进行了硬编码.我的详细工作如下.

MySQL资料

主要产品表是所有产品的索引,每个产品类别都有单独的字段.例如,考虑一辆自行车和一台电视机.这两个产品共享产品表中的公共字段:

>产品编号
>名称
>价格
>图片
>分类

当涉及到类别时,它还有一些额外的字段.因此,自行车属于汽车类别,其中包含以下领域:

>里程
>引擎类型
>座席
>燃料

对于电视产品,它属于自己的类别电视,其中的字段是:

>尺寸
>视频类型
>响应时间
>输入选项

目前,我的数据库结构如下:

DESC `Products`;
+------------+--------------+------+-----+---------+----------------+
|      FIELD |         TYPE | NULL | KEY | DEFAULT |          EXTRA |
+------------+--------------+------+-----+---------+----------------+
| Product ID |      int(11) |   NO | PRI |  (null) | auto_increment |
|       Name | varchar(255) |  YES |     |  (null) |                |
|      Price |      int(11) |  YES |     |  (null) |                |
|      Photo | varchar(255) |  YES |     |  (null) |                |
|   Category |      int(11) |  YES |     |  (null) |                |
+------------+--------------+------+-----+---------+----------------+

类别字段为:

DESC `television`;
+---------------+--------------+------+-----+---------+-------+
|         FIELD |         TYPE | NULL | KEY | DEFAULT | EXTRA |
+---------------+--------------+------+-----+---------+-------+
|    Product ID |      int(11) |  YES |     |  (null) |       |
|    Dimensions |  varchar(25) |  YES |     |  (null) |       |
|    Video Type | varchar(255) |  YES |     |  (null) |       |
| Response Time |  varchar(25) |  YES |     |  (null) |       |
| Input Options |         text |  YES |     |  (null) |       |
+---------------+--------------+------+-----+---------+-------+

DESC `automobiles`;
+-------------+--------------+------+-----+---------+-------+
|       FIELD |         TYPE | NULL | KEY | DEFAULT | EXTRA |
+-------------+--------------+------+-----+---------+-------+
|  Product ID |      int(11) |  YES |     |  (null) |       |
|     Mileage |      int(11) |  YES |     |  (null) |       |
| Engine Type | varchar(255) |  YES |     |  (null) |       |
|      Seater |      int(11) |  YES |     |  (null) |       |
|        Fuel | varchar(255) |  YES |     |  (null) |       |
+-------------+--------------+------+-----+---------+-------+

当我将数据插入数据库时​​,我使用这种方式:

INSERT INTO `television`
    (`Product ID`, `Dimensions`, `Video Type`, `Response Time`, `Input Options`)
VALUES
    (1, 100, 'hd', 2, 'hd');
INSERT INTO `automobiles`
    (`Product ID`, `Mileage`, `Engine Type`, `Seater`, `Fuel`)
VALUES
    (1, 100, 'hd', 2, 'hd');

HTML / PHP

对于一组静态类别而言似乎不错,在这里我使用如下所示的简单形式.

电视

<form action="new.php">
    <ul>
        <li>
            <label>Name</label>
            <input type="text" />
        </li>
        <li>
            <label>Price</label>
            <input type="text" />
        </li>
        <li>
            <label>Photo</label>
            <input type="text" />
        </li>
        <li>
            <label>Category</label>
            <input type="text" />
        </li>
        <li>
            <label>Dimensions</label>
            <input type="text" />
        </li>
        <li>
            <label>Video Type</label>
            <input type="text" />
        </li>
        <li>
            <label>Response Time</label>
            <input type="text" />
        </li>
        <li>
            <label>Input Options</label>
            <input type="text" />
        </li>
        <li>
            <input type="submit" />
        </li>
    </ul>
</form>

汽车

<form action="new.php">
    <ul>
        <li>
            <label>Name</label>
            <input type="text" />
        </li>
        <li>
            <label>Price</label>
            <input type="text" />
        </li>
        <li>
            <label>Photo</label>
            <input type="text" />
        </li>
        <li>
            <label>Category</label>
            <input type="text" />
        </li>
        <li>
            <label>Mileage</label>
            <input type="text" />
        </li>
        <li>
            <label>Engine Type</label>
            <input type="text" />
        </li>
        <li>
            <label>Seater</label>
            <input type="text" />
        </li>
        <li>
            <label>Fuel</label>
            <input type="text" />
        </li>
        <li>
            <input type="submit" />
        </li>
    </ul>
</form>

我的问题

现在,表单数据很简单.我只是使用表的结构来插入数据库.我现在面临的问题是,如果类别应该是动态的,该怎么办?我应该如何更改数据库架构以使其动态?

好吧,让我定义一下我对动态的看法.当管理员想要添加新类别时,我目前要做的是,为类别创建新表格,转到phpMyAdmin并添加新表,然后再次添加相同的插入查询和新文件.我想仅通过PHP通过管理面板来执行此操作.这可行吗?我应该进行哪种模式更改?

更新#1

首先.谢谢!现在,我以这种方式即兴创作了桌子.现在我有四个桌子.

>产品-所有产品的索引.
>类别-为了名酒?包括类别名称及其父类别.
>属性-包括类别的属性名称.
>关联-产品ID,属性ID及其值的关联.

现在,我正在努力.这看起来很有希望.将等待答案,同时也更新我的工作! :) 谢谢.

解决方法:

我认为您需要更改数据库架构.在这里,我可以看到类别是第n级其他父类别的子类别.子类别也具有不同的值字段.为此,您可能需要自定义字段管理,以使这些字段也变得动态.因此,总的来说,我的建议方案如下.

产品

Product_ID, Name, Price, Photo, Category_ID (forignkey of category table)

类别

Category_ID, Name, Parent_ID

Category_Field

Category_Field_ID, Category_ID, Name, Type

Product_Category_Field_Value

ID, Product_ID, Category_ID, Category_Field_ID, Value

因此,在“产品”表中,我们通过Category_ID映射了类别.在类别表中,我们通过parent_ID维护子类别.这意味着如果类别是根类别,则在parent_ID中使用0,否则在其父类别中使用Category_ID.在Category_Field中,使用与类别关联的自定义字段名称.这里的type是字段或数据的类型,例如可以在type中使用的文本,textarea,select,radio等. Product_Category_Field_Value用于每个产品的自定义字段的值.使用它会起作用.祝一切顺利.

标签:database-design,database-schema,mysql,php,database
来源: https://codeday.me/bug/20191030/1970603.html