database - multiple - llenar un select a partir de la opcion elegida en otro select laravel
¿Cuáles son las mejores prácticas en el diseño de db cuando quiero almacenar un valor que se selecciona de una lista desplegable o ingresa el usuario? (6)
Esto no es un problema de diseño de la base de datos. Es un problema de UI.
La lista desplegable de universidades se basa en las filas de una tabla. Esa tabla debe tener una nueva fila insertada cuando el usuario escriba una nueva Universidad en el cuadro de texto.
Si desea separar la lista que proporcionó de las agregadas por los usuarios, puede tener una columna en la tabla de la Universidad con el origen (o procedencia) de los datos.
Estoy tratando de encontrar la mejor manera de diseñar la base de datos para permitir el siguiente escenario:
- Al usuario se le presenta una lista desplegable de Universidades (por ejemplo)
- El usuario selecciona su universidad de la lista si existe
- Si la universidad no existe, debe ingresar a su propia universidad en un cuadro de texto (algo así como Otro: [___________])
cómo debería diseñar la base de datos para manejar esta situación, dado que podría querer usar el ID de la universidad, por ejemplo (probablemente solo para las universidades integradas y no para las ingresadas por los usuarios)
¡Gracias!
Solo quiero que sea similar a cómo Facebook maneja esta situación. Si el usuario selecciona su educación (escribiendo realmente el cuadro combinado que no es mi problema) y seleccionando uno de los valores devueltos, ¿qué haría Facebook?
En mi opinión, insertaría el ID de usuario y el ID de educación en una tabla de muchos a muchos. Ahora, ¿qué sucede si el usuario ingresa no está en la base de datos? Todavía está almacenado en su perfil, pero ¿dónde? escribiendo "St" ... sugiriendo Stanford http://i43.tinypic.com/hufztt.jpg
escribiendo una universidad no existente http://i41.tinypic.com/14j56s8.jpg
Mantenga un indicador para las filas ingresadas a través de la entrada del usuario en la misma tabla que tiene sus otros puntos de datos. Luego puedes ordenar usando la bandera.
No estoy seguro si la pregunta es muy clara aquí.
Lo he hecho bastantes veces en el trabajo y solo selecciono entre la lista desplegable de un cuadro de texto. Si los datos se ingresan en el cuadro de texto, primero los inserto en la base de datos y luego uso IDENTITY para obtener el identificador único de esa fila insertada para más consultas.
INSERT INTO MyTable Name VALUES (''myval''); SELECT @@SCOPE_IDENTITY()
Sin embargo, esto va en contra de MS SQL 2008, no estoy seguro de si el @@ SCOPE_IDENTITY () global existe en otras versiones de SQL, pero estoy seguro de que hay equivalentes.
Una forma en que esto se resolvió en una empresa anterior en la que trabajé:
Cree dos columnas en su tabla: 1) una identificación anulable de la cadena suministrada por el sistema (almacenada en una tabla separada) 2) la cadena proporcionada por el usuario
Solo uno de estos está poblado. Una restricción puede hacer cumplir esto (y, además, que al menos una de estas columnas se rellena, si corresponde).
Cabe señalar que el problema que estábamos resolviendo con esto era una verdadera situación de "Otro:". Era una descripción textual de un artículo con algunos valores predeterminados preestablecidos. Su situación suena como una entidad real que no está en la lista, más de un usuario podría querer ingresar a la misma universidad.
Podría hacer trampa: si no está preocupado por la integridad referencial de este campo (es decir, está allí para aparecer en el perfil de un usuario y no es necesario para las reglas comerciales estrictamente vigentes), almacénelo como una simple columna VARCHAR.
Para su menú desplegable, use una consulta como:
SELECT DISTINCT(University) FROM Profiles
Si quiere filtrar errores tipográficos o únicos, intente:
SELECT University FROM PROFILES GROUP BY University HAVING COUNT(University) > 10 -- where 10 is an arbitrary threshold you can tweak
Utilizamos este código en una de nuestras bases de datos para almacenar las descripciones comerciales de las empresas contratistas; dado que esto es solo informativo (hay un campo "Categoría" separado para hacer cumplir las reglas comerciales) es una solución aceptable.
CREATE TABLE university
(
id smallint NOT NULL,
name text,
public smallint,
CONSTRAINT university_pk PRIMARY KEY (id)
);
CREATE TABLE person
(
id smallint NOT NULL,
university smallint,
-- more columns here...
CONSTRAINT person_pk PRIMARY KEY (id),
CONSTRAINT person_university_fk FOREIGN KEY (university)
REFERENCES university (id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
);
public se establece en 1 para el Unis en el sistema y 0 para el usuario ingresado en unis.