2010-02-26 27 views
6

Tengo una lista de sinónimos y necesito crear una base de datos en SQL para ella.Estructura de la base de datos SQL

Estaba pensando en utilizar un diseño de base de datos relacional, pero no sé si sería el mejor. Habrá una buena cantidad de tráfico usando esta base de datos.

estaba pensando en la Tabla 1 sería como

Id 

Table2 
Id 
InterlinkID (Table1 Id) 
Word 

¿Esto sería la mejor manera? Podría haber 1 - más de 20 palabras enlazadas. Otro problema que veo en esta configuración es si tengo 1 palabra que funciona como sinónimo de más de una palabra.

No tan gran ejemplo de cómo se va a utilizar, pero se entiende la idea:

 

    Table 1 
    Id 1 
    Id 2 

    Table 2 
    Id 1 
    InterlinkID 1 
    Word One 
    Id 2 
    InterlinkID 1 
    Word 1 
    Id 3 
    InterlinkID 1 
    Word First 
    Id 4 
    InterlinkID 2 
    Word Two 
    Id 5 
    InterlinkID 2 
    Word 2 
    Id 6 
    InterlinkID 2 
    Word Second 

Respuesta

6

La forma más mínima de modelar la relación sería como una única tabla con tres columnas:

  • id - clave primaria, número entero
  • word - palabra única, debe tener una restricción única para detener duplicados
  • parent_id - anulable

Uso del parent_id para almacenar el número de identificación de la palabra que desea relacionar la palabra actual a. IE:

id | word | parent_id 
--------------------------- 
1 | abc | NULL 
2 | def | 1 

... abc muestra que se añadió en primer lugar, y def es sinónimo de ella. medios

A más obvias y flexibles de modelar la relación sería con dos tablas:

  1. WORDS

    • id, clave primaria
    • wordvalue
  2. SYNONYMS

    • word_id
    • synonym_id

Ambas columnas de la tabla SYNONYMS sería la clave principal, para asegurarse de que no puede haber duplicados. Sin embargo, no detendrá los duplicados en orden inverso. Pero le permitirá mapear numerosas combinaciones para tener una relación de "tela de araña" entre palabras, mientras que el formato de tabla única solo admitiría una relación jerárquica.

+0

+1, también podría considerar una restricción de comprobación (para el diseño de dos tablas) en SYNONYMS: 'word_id

+0

@KM: Es cierto, pero también complicaría relacionar una palabra con una ID más alta con una ya existente. Diga "es" y "como" son sinónimos, y "es" fue puesto primero. No podría relacionar "como" a "es" después de agregar "como" - la restricción de verificación solo le permitiría relacionar "es" con "como". Tendría que mostrar los valores de pk para ambas palabras para que los usuarios sepan por qué pueden hacerlo de una manera pero no de la otra. –

+0

Vamos a usar el Método n. ° 2 de OMG Ponies, ¡GRACIAS POR LA INFORMACIÓN! – Brad

Cuestiones relacionadas