English 中文(简体)
如何设计一种行文,使用户能够界定在M-D关系中的详细表格的领域和类型?
原标题:How can i design a DB where the user can define the fields and types of a detail table in a M-D relationship?
  • 时间:2010-06-01 17:23:24
  •  标签:
  • sql
  • join

我的申请有一张表格,称为事件,每场活动大约为30个标准领域,但用户也界定了哪些领域可能属于任何名称或类型,在事件数据表中。 用户可以确定这些活动数据表,具体指明了x个领域(即文字/日/日/日)和这些领域的名称。 这一活动数据(表)对每一活动都有所不同。

我目前的做法是为这些定义设立一个研究表。 因此,如果需要查询每个记录的所有事件和事件数据,即采用两个问题(即从事件中挑选*,然后在事件中选择每个记录,从某个表格中挑选*)。

这样做是否有更好的办法? 迄今为止,我已经执行了这一规定,但我的大多数询问都要求向亚洲开发银行发出两条不同的呼吁,即不能简单地与我的主事桌一道,为事件的每一记录提供不同的事件数据表。

我对我的主要问题是:我能否与我的主议桌一道,为每一记录提供不同的详细表格?

E.g.

SELECT E.*, E.Tablename 
FROM events E 
LEFT JOIN  E.tablename  T ON E._ID = T.ID

如果没有,那么,设计我数据库的方法就更好了,因为我不知道究竟有多少用户界定了哪些领域,哪些是哪一类。

最佳回答

处理方式有四种。

  1. 增列几个领域,称为“Custom1”、“Custom2”、“Custom3”等。 这些数据应该有变果(吗)的数据类型。 或传真

  2. 添加一个没有结构的数据(如XML栏)。

  3. 建立一个与某种模板相关的名称/数值表。 让他们管理模板。 你们不得不使用纸张或传真来提取数据。

  4. 使用MongoDB或另一个NoSql产品风格储存。

上文已经指出,第一个领域的优势是快速发展,但将习俗领域的数量限制在你们所确定的数量上。 较老的主要类型应用就是这样。 销售 部队装备使用。

第二种办法是,每个记录都有自己的习惯领域。 然而,根据你的数据库,这里存在明确的挑战。 搁置这一点,不建议这样做。

第三个挑战一般难以规范,但允许极其灵活。 卖主和其他用途已经走过这条路;包括一对一对.。 倒数是,Microsoft显然以这种方式取得专利,并且正在上传给几个公司。 我认为,从个人角度来说,这只是一纸空文。 点是,在你自己的风险下使用。

第四个选择是有意义的。 我们这样做是徒劳的,而且表现得很好,而编码则很简单。 这可能是你对无结构数据的最佳依据。

问题回答

我的做法是,如果可能的话,避免对每次活动采用不同的表格。

我想用的是:

Event (EventId, ..., ...)
EventColumnType (EventColumnTypeId, EventTypeId, ColumnName)
EventColumnData (EventColumnTypeId, Data)

你们只局限于你可以储存的数据类型(例如,任何数据都必须加以说明),但你的事件和栏目数目是不受限制的。

我从你描述中了解到的情况是,你有一个活动桌,然后是每个活动的一个单独的活动桌。

而不是这样,为什么没有一个包含事件表外关键人物的单一事件现场表,一个外地名称(即假胜地为PK)和一个外地价值。

保证不是最好的。 你们 st忙地把价值固定下来,或把所有东西储存起来。 你们仍然 st着两个问题,一个是事件表,一个是去做事场,但至少你没有为系统中的每一事件(yuck x10)提供新的表格。

另一种(显然更糟)选择是,在你需要时,将习俗领域编成单列,然后淡化。 因此,您的问询就好像是这样。

Select E.*, C.*
From events E, customFields C
Where E.ID = C.ID

是否可能仅仅对用户施加限制? 我知道2007年下点下层的表格有一栏用于海关数据,如海关数据1、海关数据2等。 这样做可能比上述一些办法容易,因为所有办法都列在一栏(尽管我已经采取这种做法),我认为,这样做会更好。

回答你的主要问题是:无。 在设定的结果中,你可以有不同栏目。 计算结果与表格一样,因此每行各列一栏。 你们可以用dding子和 du子打碎它,但这可能并不好。

您可尝试确定固定活动数据表,每栏10个。 然后,你将使用元数据储存在一个单独的表格中,而只是读到系统启动时。 元数据将告诉你,事件类型“foo”的实地“名称”在事件数据表中标有<代码>string0的栏目,一个名为“报告器”的栏目为string1的栏目,另一个称为“报告日期”的栏目。 它的烟雾和废物空间比较灵活。 如果你重新负责数据库,你甚至可以确定表上的观点,以便客户看上像“正常”表。 如果客户制作自己的表格,并在活动记录中贴上桌子,那么这显然胜出。

如果你真的难以分辨,你可以撰写一个数据库程序,查询表格结构,把所有物品编成主要/类型/价值标记的灯塔,并将之重新编为最后一栏,但可能比你现在做的事情少得多。





相关问题
SQL SubQuery getting particular column

I noticed that there were some threads with similar questions, and I did look through them but did not really get a convincing answer. Here s my question: The subquery below returns a Table with 3 ...

难以执行 REGEXP_SUBSTR

I m 查询Oracle 10g。 我有两张表格(样本数据见下文)。 i m 试图提取一些领域

SQL Query Shortcuts

What are some cool SQL shorthands that you know of? For example, something I learned today is you can specify to group by an index: SELECT col1, col2 FROM table GROUP BY 2 This will group by col2

PHP array callback functions for cleaning output

I have an array of output from a database. I am wondering what the cleanest way to filter the values is example array Array ( [0] => Array ( [title] => title 1 ...

OracleParameter and DBNull.Value

we have a table in an Oracle Database which contains a column with the type Char(3 Byte). Now we use a parameterized sql to select some rows with a DBNull.Value and it doesn t work: OracleCommand ...

Running numbers in SQL

I have a SQL-statement like this: SELECT name FROM users WHERE deleted = 0; How can i create a result set with a running number in the first row? So the result would look like this: 1 Name_1 2 ...

How to get SQL queries for each user where env is production

I’m developing an application dedicated to generate statistical reports, I would like that user after saving their stat report they save sql queries too. To do that I wrote the following module: ...

热门标签